import type { Recordable, UserInfo } from '@vben/types';

import { ref } from 'vue';
import { useRouter } from 'vue-router';
import axios from 'axios';

import { LOGIN_PATH, DEFAULT_HOME_PATH } from '@vben/constants';
import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';

import { defineStore } from 'pinia';
import { notification } from 'ant-design-vue';

import { getUserInfoApi, loginApi, logoutApi } from '#/api';

export const useAuthStore = defineStore('auth', () => {
    const accessStore = useAccessStore();
    const userStore = useUserStore();
    const router = useRouter();

    const loginLoading = ref(false);

    /**
     * 异步处理登录操作
     * Asynchronously handle the login process
     * @param params 登录表单数据
     */
    async function authLogin(
        params: Recordable<any>,
        onSuccess?: () => Promise<void> | void,
    ) {
        // 异步处理用户登录操作并获取 accessToken
        const userInfo: null | UserInfo = null;
        try {
          loginLoading.value = true;
          params.type = 1;
          const res = await loginApi(params); 
          
          const accessToken = 'a41df41b7e714e91a0b9999fea5b3524';
            // 如果成功获取到 accessToken
            if (accessToken) {
                accessStore.setAccessToken(accessToken);

                // 获取用户信息并存储到 accessStore 中
                // const [fetchUserInfoResult, accessCodes] = await Promise.all([
                //     fetchUserInfo(),
                //     getAccessCodesApi(),
                // ]);

               const userInfo ={ userName:'张三',roles:['admin']};

                userStore.setUserInfo(userInfo);
                // accessStore.setAccessCodes(accessCodes);

                if (accessStore.loginExpired) {
                    accessStore.setLoginExpired(false);
                } else {
                    onSuccess
                        ? await onSuccess?.()
                        : await router.push(userInfo.homePath || DEFAULT_HOME_PATH);
                }

                if (userInfo?.userName) {
                    notification.success({
                        description: `${userInfo?.userName}`,
                        duration: 3,
                        message: $t('authentication.loginSuccess'),
                    });
                }
            }
        } finally {
            loginLoading.value = false;
        }

        return {
            userInfo,
        };
    }

    async function logout(redirect: boolean = true) {
        try {
            await logoutApi();
        } catch {
            // 不做任何处理
        }
        resetAllStores();
        accessStore.setLoginExpired(false);

        // 回登录页带上当前路由地址
        await router.replace({
            path: LOGIN_PATH,
            query: redirect
                ? {
                    redirect: encodeURIComponent(router.currentRoute.value.fullPath),
                }
                : {},
        });
    }

    async function fetchUserInfo() {
        let userInfo: null | UserInfo = null;
        userInfo = await getUserInfoApi();
        userStore.setUserInfo(userInfo);
        return userInfo;
    }

    function $reset() {
        loginLoading.value = false;
    }

    return {
        $reset,
        authLogin,
        fetchUserInfo,
        loginLoading,
        logout,
    };
});
